﻿/*************************************************************************************
 * 文 件 名:   IHK_FirstPersonCamSystem
 * 
 * 描    述:   HK_FirstPersonCam 系统层脚本
 * 
 * 版    本：  V1.0
 * 创 建 者：  京产肠饭
 * 创建时间：  2023/6/27
 * 链   接：  https://gitee.com/JingChanChangFan/hk_-unity-tools
*************************************************************************************/

using QFramework;
using UnityEngine;

namespace HKTools
{
    public interface IHK_FirstPersonCamSystem : ISystem
    {
        HK_FirstPersonCtrl FirstPerson { get; set; }
        void InitFirstPersonCam(HK_FirstPersonCtrl firstPerson);
        void ChangeFirstPersonPos(Transform pos_TF, bool isChangeRot);
        Transform curPos_TF { get; set; }
    }

    public class HK_FirstPersonCamSystem : AbstractSystem, IHK_FirstPersonCamSystem
    {
        public HK_FirstPersonCtrl FirstPerson { get; set; }

        public Transform curPos_TF { get; set; }

        protected override void OnInit()
        {

        }

        public void InitFirstPersonCam(HK_FirstPersonCtrl firstPerson)
        {
            this.FirstPerson = firstPerson;
        }

        public void ChangeFirstPersonPos(Transform pos_TF, bool isChangeRot)
        {
            if (FirstPerson == null)
            {
                Debug.LogError("FirstPerson未完成初始化！");
                return;
            }

            if (curPos_TF == pos_TF)
            {
                Debug.Log("当前已处于 " + pos_TF.name + " 的位置...");
            }
            else
            {
                ActionKit.Sequence()
                    .Callback(() =>
                    {
                        FirstPerson.GetComponent<CharacterController>().enabled = false;
                        FirstPerson.ShowMask();
                    })
                    .Delay(0.4f)
                    .Callback(() =>
                    {
                        FirstPerson.transform.position = pos_TF.position;
                        curPos_TF = pos_TF;
                        if (isChangeRot)
                        {
                            FirstPerson.ChangeRot(pos_TF);
                        }
                        else
                        {
                            FirstPerson.ResetRot();
                        }
                        FirstPerson.GetComponent<CharacterController>().enabled = true;
                    })
                    .StartGlobal();
            }
        }
    }
}